package com.itheima.lj.fragment;

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.itheima.lj.R;
import com.itheima.lj.adapter.NewsAdapter;
import com.itheima.lj.bean.News;
import com.itheima.lj.bean.NewsList;
import com.itheima.lj.net.OSChinaApi;
import com.itheima.lj.utils.XmlUtils;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
/**
 * 界面框架搭建之带刷新的列表界面 :资讯列表 实现步骤：
 *  1. 设置xml布局文件，配置布局文件给界面，加载布局(SwipeRefreshLayout+RecyclerView)
 * 2. 查找引用关心的控件、初始化控件
 *  3. 对SwipeRefreshLayout设置下拉刷新监听
 * 4. 给RecyclerView添加条目点击事件,滚动监听
 * 5. 创建数据适配器
 * 6. 给RecyclerView设置数据适配器
 * 7. 发起网络请求数据
 * 8. 将请求到的数据解析 (InputSteam, byte[], String) -> (Gson,xStream) -> Bean转换List<News>  
 * 9. 展示数据到界面上(更新数据适配器)
 */
public class NewsFragment_1 extends Fragment implements  SwipeRefreshLayout.OnRefreshListener {
    @BindView(R.id.rv_news)
    RecyclerView mRecylerView;
    @BindView(R.id.swipe_refresh_layout)
    SwipeRefreshLayout mSwipeRefreshLayout;
    private NewsAdapter mAdapter;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        /***************************与UI相关的操作**************************/
        //1.  设置xml布局文件，配置布局文件给界面，加载布局(SwipeRefreshLayout+RecyclerView)
        View view = View.inflate(getContext(),getLayoutId(), null);
        //2. 查找引用关心的控件、初始化控件
        ButterKnife.bind(this, view);
        //2.1 SwipeRefreshLayout 初始化
        //初始化SwipeRefreshLayout 颜色 及 刷新监听
        mSwipeRefreshLayout.setColorSchemeColors(Color.parseColor("#ff0000"),
                Color.parseColor("#00ff00"), Color.parseColor("#0000ff"),
                Color.parseColor("#ffff00"));
        //2.2 对RecyclerView初始化
        //设置线性的布局方式
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getContext());
        linearLayoutManager.setOrientation(RecyclerView.VERTICAL);
        mRecylerView.setLayoutManager(linearLayoutManager);

        //3. 对SwipeRefreshLayout设置下拉刷新监听
        mSwipeRefreshLayout.setOnRefreshListener(this);

        //4. 给RecyclerView添加条目点击事件,滚动监听
        mRecylerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
            }
        });

        //5. 创建RecyclerView数据适配器
        mAdapter = getListAdapter();


        //6. 给RecyclerView设置数据适配器
         mRecylerView.setAdapter(mAdapter);

        /***********************与数据相关的操作*********************/
        //7.发起网络请求数据
        sendRequestData();

        return view;
    }

    private NewsAdapter getListAdapter() {
        return  new NewsAdapter();
    }

    //7. 请求服务端数据
    private void sendRequestData() {
        //要请求的服务端的url
        String url="http://10.0.2.2:8080/oschina/list/news/page0.xml";
        /**访问服务端，获取数据
         *  url：访问的url
         *  回调接口ResultRefrsh： 处理访问服务端返回的数据 ：
         *     - onSuccess ： 成功后回调的方法
         *     - onFailue ：失败后回调的方法
         */
        OSChinaApi.getData(url,listener);
    }

    //取得界面布局的资源id
    public int getLayoutId(){
        return  R.layout.fragment_news;
    }


    //SwipeRefreshLayout 刷新回调的方法
    @Override
    public void onRefresh() {

    }

    // 访问服务端接口回调的方法
    protected OSChinaApi.ResultRefresh listener =new OSChinaApi.ResultRefresh() {
        @Override
        public void onSuccess(byte[] datas) {
            //todo
           //8. 将请求到的数据解析 (InputSteam, byte[], String) -> (Gson,xStream) -> Bean转换List<News> 
            final NewsList newslist = XmlUtils.toBean(NewsList.class, datas);
            System.out.println("onSuccess方法：处理数据");

           //9. 展示数据到界面上(更新数据适配器)
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    List<News> list = newslist.getList();
                    //通过适配器展示列表数据
                    mAdapter.addDatas(list);
//                    System.out.println("runOnUiThread方法：展示数据"+list.get(0).getTitle());
                }
            });





        }

        @Override
        public void onFailure(String errorMsg) {
            //todo

        }
    };


}
